/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package command;

import command.implementacoes.Dividendo;
import command.implementacoes.Lucro;
import command.implementacoes.SairDaPrisao;
import command.implementacoes.VaParaPrisao;
import command.interfaces.Carta;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import model.Jogador;

/**
 *
 * @author Lucas - Representa o baralho dos sorte e reves do jogo.....
 * Utiliza padrao singleton
 */
public class Baralho {

    private List<Carta> listaCartas;
    private static Baralho instancia;

    public Baralho() {
        listaCartas = new ArrayList<Carta>();
        criaBaralho();
    }

    public static Baralho getInstancia() {
        if (instancia == null) {
            instancia = new Baralho();
        }

        return instancia;
    }

    public List<Carta> getListaCartas() {
        return listaCartas;
    }

    public void criaBaralho() {
        //Cartas prisao
        listaCartas.add(new SairDaPrisao());
        listaCartas.add(new VaParaPrisao());

        //Cartas de pagamento..
        listaCartas.add(new Lucro(30, "Achou na rua!"));
        listaCartas.add(new Lucro(50, "Visinho lhe pagou!"));
        listaCartas.add(new Lucro(80, "Cortar a grama da visinha!"));
        listaCartas.add(new Lucro(100, "Presente do papai noel!"));
        listaCartas.add(new Lucro(120, "Venda de materiais!"));
        listaCartas.add(new Lucro(150, "Brinde do sogro!"));
        listaCartas.add(new Lucro(180, "Horas extras!"));
        listaCartas.add(new Lucro(200, "Ganho de aposta!"));
        listaCartas.add(new Lucro(200, "Tigrão lhe pagou!"));
        listaCartas.add(new Lucro(200, "Ganho na mega-sena!"));

        //Cartas de divida...
        listaCartas.add(new Dividendo(30, "Furto qualificado!"));
        listaCartas.add(new Dividendo(50, "Churrasco com os amigos!"));
        listaCartas.add(new Dividendo(80, "Aposta de jogo!"));
        listaCartas.add(new Dividendo(100, "Pagamento de divida!"));
        listaCartas.add(new Dividendo(120, "Conta da internet!"));
        listaCartas.add(new Dividendo(150, "Pagamento do RU!"));
        listaCartas.add(new Dividendo(180, "Mensalidade do Ingles!"));
        listaCartas.add(new Dividendo(200, "O tigrão te cobrou!"));
        listaCartas.add(new Dividendo(200, "Compra de materiais!"));
        listaCartas.add(new Dividendo(200, "Presente para a mulher!"));

        //Embarralha o baralho...
        Collections.shuffle(listaCartas);
    }

    /*
     * Retira uma carta do baralho e a executa...
     */
    public void retirarCarta(Jogador j) {
        if (listaCartas.isEmpty()) {
            criaBaralho();
            listaCartas.get(0).execute(j);
            listaCartas.remove(0);
        } else {
            listaCartas.get(0).execute(j);
            listaCartas.remove(0);
        }
    }
}
